﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONTROLADOR;
using Cotizav.CONEXION;
using Cotizav.PRESENTACION.DialogBox;
using Cotizav.CONTROLADOR.Otros;
using Cotizav.PRESENTACION.Base;
using Cotizav.PRESENTACION.Caracteristica;
using System.Globalization;

namespace Cotizav.PRESENTACION.Equipo
{
    public partial class IURegistroEquipo : UserControl
    {
        public List<CARACTERISTICA> caracteristicas;
        LISTA_TARIFA listaTarifa;

        CtrlEquipo ctEquipo;
        CtrlCaracteristica ctCaracteristica;
        CtrlCondicion ctCondicion;
        CtrlMarca ctMarca;
        CtrlModelo ctModelo;
        CtrlListaTarifa ctListaTarifa;     
        
        public IURegistroEquipo()
        {
            InitializeComponent();

            caracteristicas = new List<CARACTERISTICA>();
            listaTarifa = new LISTA_TARIFA();
            
            ctEquipo = new CtrlEquipo();
            ctCaracteristica = new CtrlCaracteristica();
            ctCondicion = new CtrlCondicion();
            ctMarca = new CtrlMarca();
            ctModelo = new CtrlModelo();
            ctListaTarifa = new CtrlListaTarifa();
        }

        private void IURegistroEquipo_Load(object sender, EventArgs e)
        {
            //cargar marca
            cmbMarca.DataSource = ctMarca.getListMarca();
            cmbMarca.DisplayMember = "nombreMarca";
            cmbMarca.ValueMember = "idMarca";
            //establecemos el panel en modo lectura para el usuario
            setReadOnlyPanel();
        }


        internal void clearPanel()
        {
            clearGBEquipo();
            clearGBListaTarifa();
            clearGBCaracteristica();
        }

        internal void clearGBEquipo()
        {
            txtCodigo.ResetText();
            txtDescripcion.ResetText();            
            cmbMarca.SelectedIndex = -1;
            cmbModelo.SelectedIndex = -1;
        }

        internal void clearGBListaTarifa()
        {
            listaTarifa = new LISTA_TARIFA();
            cmbMoneda.SelectedIndex = -1;
            txtnumDia.ResetText();
            txtnumSemana.ResetText();
            txtnumMes.ResetText();
            txtTarifaHoraDia.ResetText();
            txtTarifaHoraSemana.ResetText();
            txtTarifaHoraMes.ResetText();
            txtTarifaDia.ResetText();
            txtTarifaSemana.ResetText();
            txtTarifaMes.ResetText(); 
        }

        internal void clearGBCaracteristica()
        {
            caracteristicas.Clear();
            txtCaracteristica.ResetText();
            txtDescrip.ResetText();
            gridCaracteristicas.DataSource = null;
        }


        internal void setEditablePanel()
        {
            txtCodigo.ReadOnly = false;
            txtDescripcion.ReadOnly = false;
            
            cmbMarca.DropDownStyle = ComboBoxStyle.DropDownList; cmbMarca.Enabled = true;
            cmbModelo.DropDownStyle = ComboBoxStyle.DropDownList; cmbModelo.Enabled = true;

            cmbMoneda.DropDownStyle = ComboBoxStyle.DropDownList; cmbMoneda.Enabled = true;

            txtnumDia.ReadOnly = false;
            txtnumMes.ReadOnly = false;
            txtnumSemana.ReadOnly = false;
            txtTarifaHoraDia.ReadOnly = false; 
            txtTarifaHoraSemana.ReadOnly = false; 
            txtTarifaHoraMes.ReadOnly = false; 
            txtTarifaDia.ReadOnly = false; 
            txtTarifaSemana.ReadOnly = false; 
            txtTarifaMes.ReadOnly = false; 

            txtCaracteristica.ReadOnly = false;
            txtDescrip.ReadOnly = false;

            btnNuevo.Enabled = true;
            btnModificar.Enabled = true;
            btnEliminar.Enabled = true;
        }

        internal void setReadOnlyPanel()
        {
            txtCodigo.ResetText(); txtCodigo.ReadOnly = true;
            txtDescripcion.ResetText(); txtDescripcion.ReadOnly = true;
            cmbMarca.DropDownStyle = ComboBoxStyle.Simple; cmbMarca.Enabled = false; cmbMarca.SelectedIndex = -1;
            cmbModelo.DropDownStyle = ComboBoxStyle.Simple; cmbModelo.Enabled = false; cmbModelo.SelectedIndex = -1;

            cmbMoneda.DropDownStyle = ComboBoxStyle.Simple; cmbMoneda.Enabled = false; cmbMoneda.SelectedIndex = -1;

            txtnumDia.ResetText(); txtnumDia.ReadOnly = true;
            txtnumMes.ResetText(); txtnumMes.ReadOnly = true;
            txtnumSemana.ResetText(); txtnumSemana.ReadOnly = true;

            txtTarifaHoraDia.ResetText(); txtTarifaHoraDia.ReadOnly = true;
            txtTarifaHoraSemana.ResetText(); txtTarifaHoraSemana.ReadOnly = true;
            txtTarifaHoraMes.ResetText(); txtTarifaHoraMes.ReadOnly = true;

            txtTarifaDia.ResetText(); txtTarifaDia.ReadOnly = true;
            txtTarifaSemana.ResetText(); txtTarifaSemana.ReadOnly = true;
            txtTarifaMes.ResetText(); txtTarifaMes.ReadOnly = true;

            gridCaracteristicas.DataSource = null;            

            txtCaracteristica.ResetText(); txtCaracteristica.ReadOnly = true;
            txtDescrip.ResetText(); txtDescrip.ReadOnly = true;

            btnNuevo.Enabled = false;
            btnModificar.Enabled = false;
            btnEliminar.Enabled = false;
        }

        internal void enableModifyPanel()
        {
            RegistroEquipo regEquipo = this.ParentForm as RegistroEquipo;
            IURegistro iureg = regEquipo.Controls["panelRegistro"] as IURegistro;

            bool objectSelected = iureg.isObjectSelectedinGrid();

            if (objectSelected)
            {
                setEditablePanel();
            }
        }

        private void cmbMarca_DropDown(object sender, EventArgs e)
        {
            cmbModelo.DataSource = null;
        }

        private void cmbMarca_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cmbMarca.SelectedIndex >= 0)
            {
                string idMarca = cmbMarca.SelectedValue.ToString();

                cmbModelo.DataSource = ctModelo.getListModelo(idMarca);
                cmbModelo.DisplayMember = "nombreModelo";
                cmbModelo.ValueMember = "idModelo";
            }
        }

        private void gridCaracteristicas_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (gridCaracteristicas.SelectedRows.Count > 0)
            {
                txtCaracteristica.Tag = gridCaracteristicas.SelectedRows[0].Index;
                txtCaracteristica.Text = gridCaracteristicas.SelectedRows[0].Cells[1].Value != null ? gridCaracteristicas.SelectedRows[0].Cells[1].Value.ToString() : string.Empty;
                txtDescrip.Text = gridCaracteristicas.SelectedRows[0].Cells[2].Value != null ? gridCaracteristicas.SelectedRows[0].Cells[2].Value.ToString() : string.Empty;
            }
        }

        internal void mostrarEquipo(string idEquipo)
        {
            EQUIPO equip = ctEquipo.getEquipo(idEquipo);
            if (equip != null)
            {
                gbInfoBasica.Tag = equip.idEquipo;
                txtCodigo.Text = equip.codigo;
                txtDescripcion.Text = equip.nombreEquipo;

                cmbMarca.SelectedIndex = cmbMarca.Items.Cast<MARCA>().SingleOrDefault(x => x.idMarca == equip.marca) != null ? cmbMarca.Items.IndexOf(cmbMarca.Items.Cast<MARCA>().SingleOrDefault(x => x.idMarca == equip.marca)) : -1;

                if (cmbMarca.SelectedIndex >= 0)
                {
                    this.cmbMarca_SelectionChangeCommitted(cmbMarca, EventArgs.Empty);
                }

                cmbModelo.SelectedIndex = cmbModelo.Items.Cast<MODELO>().SingleOrDefault(x => x.idModelo == equip.idModelo) != null ? cmbModelo.Items.IndexOf(cmbModelo.Items.Cast<MODELO>().SingleOrDefault(x => x.idModelo == equip.idModelo)) : -1;
            }
            else
            {
                gbInfoBasica.Tag = string.Empty;
                clearGBEquipo();
            }

            listaTarifa = ctListaTarifa.getListTarifa(idEquipo);
            if (listaTarifa != null)
            {
                cmbMoneda.SelectedIndex = !string.IsNullOrWhiteSpace(listaTarifa.moneda) ? listaTarifa.moneda == "Local" ? 0 : 1 : -1;

                gbTarifas.Tag = listaTarifa.idListaTarifa;  //si no tiene tarifa
                txtnumDia.Text = listaTarifa.horaxdia.GetValueOrDefault().ToString();
                txtnumSemana.Text = listaTarifa.horaxsemana.GetValueOrDefault().ToString();
                txtnumMes.Text = listaTarifa.horaxmes.GetValueOrDefault().ToString();

                txtTarifaHoraDia.Text = listaTarifa.tarifaHoraDia.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);
                txtTarifaHoraSemana.Text = listaTarifa.tarifaHoraSemana.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);
                txtTarifaHoraMes.Text = listaTarifa.tarifaHoraMes.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);

                txtTarifaDia.Text = listaTarifa.tarifaTotalDia.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);
                txtTarifaSemana.Text = listaTarifa.tarifaTotalSemana.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);
                txtTarifaMes.Text = listaTarifa.tarifaTotalMes.GetValueOrDefault().ToString("N", CultureInfo.InvariantCulture);
            }
            else
            {
                gbTarifas.Tag = string.Empty;
                clearGBListaTarifa();
            }

            caracteristicas = ctCaracteristica.getListCaracteristicas(idEquipo);
            if (caracteristicas != null)
            {
                gridCaracteristicas.DataSource = null;
                gridCaracteristicas.DataSource = caracteristicas;
                gridCaracteristicas.ClearSelection();
            }
            else
            {
                clearGBCaracteristica();
            }
        }

        internal void registrarEquipo()
        {
            //verificamos que la informacion basica se encuentre registrada
            if (!string.IsNullOrWhiteSpace(txtCodigo.Text))
            {
                if (cmbMarca.SelectedIndex >= 0)
                {
                    if (!string.IsNullOrWhiteSpace(txtDescripcion.Text))
                    {
                        if (cmbModelo.SelectedIndex >= 0)
                        {
                            //if (!string.IsNullOrWhiteSpace(txtAnio.Text))
                            //{
                                //if (cmbMoneda.SelectedIndex >= 0)
                                //{
                                //    if (!existeFilaDiaVacia())
                                //    {
                                //        if (!existeFilaSemanaVacia())
                                //        {
                                //            if (!existeFilaMesVacia())
                                //            {
                                                EQUIPO equipo = new EQUIPO()
                                                {
                                                    codigo = txtCodigo.Text,
                                                    //serie = txtSerie.Text,
                                                    marca = cmbMarca.SelectedValue.ToString(),
                                                    nombreEquipo = txtDescripcion.Text,
                                                    idModelo = cmbModelo.SelectedValue.ToString(),
                                                    //año = Convert.ToInt32(txtAnio.Text),
                                                    eliminado = 0
                                                };

                                                //LISTA_TARIFA
                                                //registramos moneda y tpo de cambio
                                                listaTarifa.moneda = cmbMoneda.SelectedItem != null ? cmbMoneda.SelectedItem.ToString() : string.Empty;
                                                //registramos la tarifa del equipo

                                                listaTarifa.horaxdia = !string.IsNullOrWhiteSpace(txtnumDia.Text) ? Convert.ToInt32(txtnumDia.Text) : 0;
                                                listaTarifa.horaxsemana = !string.IsNullOrWhiteSpace(txtnumSemana.Text) ? Convert.ToInt32(txtnumSemana.Text) : 0;
                                                listaTarifa.horaxmes = !string.IsNullOrWhiteSpace(txtnumMes.Text) ? Convert.ToInt32(txtnumMes.Text) : 0;

                                                listaTarifa.tarifaHoraDia = !string.IsNullOrWhiteSpace(txtTarifaHoraDia.Text) ? Convert.ToDecimal(txtTarifaHoraDia.Text) : new decimal(0);
                                                listaTarifa.tarifaHoraSemana = !string.IsNullOrWhiteSpace(txtTarifaHoraSemana.Text) ? Convert.ToDecimal(txtTarifaHoraSemana.Text) : new decimal(0);
                                                listaTarifa.tarifaHoraMes = !string.IsNullOrWhiteSpace(txtTarifaMes.Text) ? Convert.ToDecimal(txtTarifaHoraMes.Text) : new decimal(0);

                                                listaTarifa.tarifaTotalDia = !string.IsNullOrWhiteSpace(txtTarifaDia.Text) ? Convert.ToDecimal(txtTarifaDia.Text) : new decimal(0);
                                                listaTarifa.tarifaTotalSemana = !string.IsNullOrWhiteSpace(txtTarifaSemana.Text) ? Convert.ToDecimal(txtTarifaSemana.Text) : new decimal(0);
                                                listaTarifa.tarifaTotalMes =  !string.IsNullOrWhiteSpace(txtTarifaMes.Text) ? Convert.ToDecimal(txtTarifaMes.Text) : new decimal(0);

                                                DialogResult result = ctEquipo.registrarEquipo(equipo, listaTarifa, caracteristicas);

                                                if (result == DialogResult.OK)
                                                {
                                                    MessageBox.Show("Equipo registrado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                                    setReadOnlyPanel();
                                                }
                                            //}
                                //            else
                                //            {
                                //                MessageBox.Show(this, "Fila 'Mes' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //            }
                                //        }
                                //        else
                                //        {
                                //            MessageBox.Show(this, "Fila 'Semana' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //        }
                                //    }
                                //    else
                                //    {
                                //        MessageBox.Show(this, "Fila 'Día' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //    }
                                //}
                                //else
                                //{
                                //    MessageBox.Show(this, "Seleccione campo 'Moneda'", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //}
                            //}
                            //else
                            //{
                            //    MessageBox.Show("Ingrese Año", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            //}
                        }
                        else
                        {
                            MessageBox.Show("Ingrese modelo", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese descripción o nombre del equipo", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese marca", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese código", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        internal void modificarEquipo()
        {
            if (MessageBox.Show(this.ParentForm, "¿Confirma actualizar la información del Equipo?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                //verificamos que la informacion basica se encuentre registrada
                if (!string.IsNullOrWhiteSpace(txtCodigo.Text))
                {
                    if (cmbMarca.SelectedIndex >= 0)
                    {
                        if (!string.IsNullOrWhiteSpace(txtDescripcion.Text))
                        {
                            if (cmbModelo.SelectedIndex >= 0)
                            {
                                //if (!string.IsNullOrWhiteSpace(txtAnio.Text))
                                //{
                                //    if (cmbMoneda.SelectedIndex >= 0)
                                //    {
                                //        if (!existeFilaDiaVacia())
                                //        {
                                //            if (!existeFilaSemanaVacia())
                                //            {
                                //                if (!existeFilaMesVacia())
                                //                {
                                                    EQUIPO equipo = new EQUIPO()
                                                    {
                                                        idEquipo = gbInfoBasica.Tag.ToString(),
                                                        codigo = txtCodigo.Text,
                                                        //serie = txtSerie.Text,
                                                        marca = cmbMarca.SelectedValue.ToString(),
                                                        nombreEquipo = txtDescripcion.Text,
                                                        idModelo = cmbModelo.SelectedValue.ToString(),
                                                        idlistaTarifa = gbTarifas.Tag.ToString(),
                                                        //año = Convert.ToInt32(txtAnio.Text),
                                                        eliminado = 0
                                                    };

                                                    //LISTA_TARIFA
                                                    //registramos moneda y tpo de cambio
                                                    listaTarifa.moneda = cmbMoneda.SelectedItem != null ? cmbMoneda.SelectedItem.ToString() : string.Empty;
                                                    //registramos la tarifa del equipo

                                                    listaTarifa.horaxdia = !string.IsNullOrWhiteSpace(txtnumDia.Text) ? Convert.ToInt32(txtnumDia.Text) : 0;
                                                    listaTarifa.horaxsemana = !string.IsNullOrWhiteSpace(txtnumSemana.Text) ? Convert.ToInt32(txtnumSemana.Text) : 0;
                                                    listaTarifa.horaxmes = !string.IsNullOrWhiteSpace(txtnumMes.Text) ? Convert.ToInt32(txtnumMes.Text) : 0;

                                                    listaTarifa.tarifaHoraDia = !string.IsNullOrWhiteSpace(txtTarifaHoraDia.Text) ? Convert.ToDecimal(txtTarifaHoraDia.Text) : new decimal(0);
                                                    listaTarifa.tarifaHoraSemana = !string.IsNullOrWhiteSpace(txtTarifaHoraSemana.Text) ? Convert.ToDecimal(txtTarifaHoraSemana.Text) : new decimal(0);
                                                    listaTarifa.tarifaHoraMes = !string.IsNullOrWhiteSpace(txtTarifaMes.Text) ? Convert.ToDecimal(txtTarifaHoraMes.Text) : new decimal(0);

                                                    listaTarifa.tarifaTotalDia = !string.IsNullOrWhiteSpace(txtTarifaDia.Text) ? Convert.ToDecimal(txtTarifaDia.Text) : new decimal(0);
                                                    listaTarifa.tarifaTotalSemana = !string.IsNullOrWhiteSpace(txtTarifaSemana.Text) ? Convert.ToDecimal(txtTarifaSemana.Text) : new decimal(0);
                                                    listaTarifa.tarifaTotalMes = !string.IsNullOrWhiteSpace(txtTarifaMes.Text) ? Convert.ToDecimal(txtTarifaMes.Text) : new decimal(0);

                                                    DialogResult result = ctEquipo.modificarEquipo(equipo, listaTarifa, caracteristicas);

                                                    if (result == DialogResult.OK)
                                                    {
                                                        MessageBox.Show("Equipo modificado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                                        setReadOnlyPanel();
                                                    }
                                //                }
                                //                else
                                //                {
                                //                    MessageBox.Show(this, "Fila 'Mes' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //                }
                                //            }
                                //            else
                                //            {
                                //                MessageBox.Show(this, "Fila 'Semana' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //            }
                                //        }
                                //        else
                                //        {
                                //            MessageBox.Show(this, "Fila 'Día' presenta campos en blanco", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //        }
                                //    }
                                //    else
                                //    {
                                //        MessageBox.Show(this, "Seleccione campo 'Moneda'", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //    }

                                //}
                                //else
                                //{
                                //    MessageBox.Show("Ingrese Año", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //}
                            }
                            else
                            {
                                MessageBox.Show("Ingrese modelo", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Ingrese descripción o nombre del equipo", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese marca", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese código", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        internal bool cancelarRegistro()
        {
            bool result = false;

            if (MessageBox.Show(this.ParentForm, "¿Desea cancelar el registro del equipo?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                this.clearPanel();
                this.setReadOnlyPanel();
                result = true;
            }
            else
            {
                result = false;
            }

            return result;
        }

        internal bool cancelarActualizacion()
        {
            bool result = false;

            if (MessageBox.Show(this.ParentForm, "¿Desea cancelar la actualización del equipo?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                this.clearPanel();
                this.setReadOnlyPanel();

                result = true;
            }
            else
            {
                result = false;
            }

            return result;
        }


        private bool existeFilaDiaVacia()
        {
            if (!string.IsNullOrWhiteSpace(txtnumDia.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaHoraDia.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaDia.Text))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        private bool existeFilaSemanaVacia()
        {
            if (!string.IsNullOrWhiteSpace(txtnumSemana.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaHoraSemana.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaSemana.Text))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        private bool existeFilaMesVacia()
        {
            if (!string.IsNullOrWhiteSpace(txtnumMes.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaHoraMes.Text) &&
                !string.IsNullOrWhiteSpace(txtTarifaMes.Text))
            {
                return false;
            }
            else
            {
                return true;
            }
        }        

        #region Tarifas

        private void calcularTarifasDia()
        {
            if (!string.IsNullOrWhiteSpace(txtnumDia.Text))
            {
                try
                {
                    double numDia = Convert.ToDouble(txtnumDia.Text);

                    if (!string.IsNullOrWhiteSpace(txtTarifaHoraDia.Text))
                    {
                        double tarifa = Convert.ToDouble(txtTarifaHoraDia.Text);
                        double tarifaxDia = numDia * tarifa;
                        txtTarifaDia.Text = tarifaxDia.ToString("N", CultureInfo.InvariantCulture);                        
                    }
                    else
                    {
                        txtTarifaDia.ResetText();                        
                    }
                }
                catch (FormatException)
                {
                    if (txtnumDia.Text != ".")
                    {
                        txtnumDia.ResetText();
                    }
                }
            }
            else
            {
                txtnumDia.ResetText();
                txtTarifaDia.ResetText();
            }
        }

        private void calcularTarifasSemana()
        {
            if (!string.IsNullOrWhiteSpace(txtnumSemana.Text))
            {
                try
                {
                    double numSemana = Convert.ToDouble(txtnumSemana.Text);

                    if (!string.IsNullOrWhiteSpace(txtTarifaHoraSemana.Text))
                    {
                        double tarifa = Convert.ToDouble(txtTarifaHoraSemana.Text);
                        double tarifaxSemana = numSemana * tarifa;
                        txtTarifaSemana.Text = tarifaxSemana.ToString("N", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        txtTarifaSemana.ResetText();
                    }
                }
                catch (FormatException)
                {
                    if (txtnumSemana.Text != ".")
                    {
                        txtnumSemana.Text = string.Empty;
                    }
                }
            }
            else
            {
                txtnumSemana.ResetText();
                txtTarifaSemana.ResetText();
            }
        }

        private void calcularTarifasMes()
        {
            if (!string.IsNullOrWhiteSpace(txtnumMes.Text))
            {
                try
                {
                    double numMes = Convert.ToDouble(txtnumMes.Text);

                    if (!string.IsNullOrWhiteSpace(txtTarifaHoraMes.Text))
                    {
                        double tarifa = Convert.ToDouble(txtTarifaHoraMes.Text);
                        double tarifaxMes = numMes * tarifa;
                        txtTarifaMes.Text = tarifaxMes.ToString("N", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        txtTarifaMes.ResetText();
                    }
                }
                catch (FormatException)
                {
                    if (txtnumMes.Text != ".")
                    {
                        txtnumMes.ResetText();
                    }
                }
            }
            else
            {
                txtnumMes.ResetText();
                txtTarifaMes.ResetText();
            }
        }

        private void txtnumDia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtnumDia_KeyUp(object sender, KeyEventArgs e)
        {
            this.calcularTarifasDia();
        }

        private void txtnumSemana_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtnumSemana_KeyUp(object sender, KeyEventArgs e)
        {
            this.calcularTarifasSemana();
        }

        private void txtnumMes_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtnumMes_KeyUp(object sender, KeyEventArgs e)
        {
            this.calcularTarifasMes();
        }

        private void txtTarifaHoraDia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTarifaHoraDia_KeyUp(object sender, KeyEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTarifaHoraDia.Text))
            {
                try
                {
                    double tarifaxHora = Convert.ToDouble(txtTarifaHoraDia.Text);
                    double hora = Convert.ToDouble(txtnumDia.Text);
                    double tarifa = hora * tarifaxHora;

                    txtTarifaDia.Text = tarifa.ToString("N");
                }
                catch (FormatException)
                {
                    if (txtTarifaHoraDia.Text != ".")
                    {
                        txtTarifaHoraDia.ResetText();
                    }
                }
            }
            else
            {
                txtTarifaDia.ResetText();
            }
        }

        private void txtTarifaHoraSemana_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTarifaHoraSemana_KeyUp(object sender, KeyEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTarifaHoraSemana.Text))
            {
                try
                {
                    double tarifaxHora = Convert.ToDouble(txtTarifaHoraSemana.Text);
                    double hora = Convert.ToDouble(txtnumSemana.Text);
                    double tarifa = hora * tarifaxHora;

                    txtTarifaSemana.Text = tarifa.ToString("N");
                }
                catch (FormatException)
                {
                    if (txtTarifaHoraSemana.Text != ".")
                    {
                        txtTarifaHoraSemana.ResetText();
                    }
                }
            }
            else
            {
                txtTarifaHoraSemana.ResetText();
            }
        }

        private void txtTarifaHoraMes_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTarifaHoraMes_KeyUp(object sender, KeyEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTarifaHoraMes.Text))
            {
                try
                {
                    double tarifaxHora = Convert.ToDouble(txtTarifaHoraMes.Text);
                    double hora = Convert.ToDouble(txtnumMes.Text);
                    double tarifa = hora * tarifaxHora;

                    txtTarifaMes.Text = tarifa.ToString("N");
                }
                catch (FormatException)
                {
                    if (txtTarifaHoraMes.Text != ".")
                    {
                        txtTarifaHoraMes.ResetText();
                    }
                }
            }
            else
            {
                txtTarifaHoraMes.ResetText();
            }
        }

        #endregion

        #region Caracteristicas

        private void gridCaracteristicas_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridCaracteristicas.DataSource != null)
            {
                gridCaracteristicas.Columns["idCaracteristica"].Visible = false;
                gridCaracteristicas.Columns["nombreCaracteristica"].HeaderText = "Característica";
                gridCaracteristicas.Columns["descripcion"].HeaderText = "Descripción";
                gridCaracteristicas.Columns["idequipo"].Visible = false;
                gridCaracteristicas.Columns["eliminado"].Visible = false;
                gridCaracteristicas.Columns["statusflag"].Visible = false;
                gridCaracteristicas.Columns["EQUIPO"].Visible = false;
                gridCaracteristicas.Columns["descripcion"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            }
        }

        internal void enableModificarButtonCaracteristica()
        {
            btnModificar.Enabled = true;
        }

        internal void disableModificarButtonCaracteristica()
        {
            btnModificar.Enabled = false;
        }

        internal void setReadOnlyGrid()
        {
            if (gridCaracteristicas.Rows.Count > 0)
            {
                foreach (DataGridViewRow dr in gridCaracteristicas.Rows)
                {
                    dr.ReadOnly = true;
                }
            }
        }

        internal void setEditableRowGrid(int index)
        {
            if (gridCaracteristicas.Rows[index] != null)
            {
                gridCaracteristicas.Rows[index].ReadOnly = false;
            }
        }

        internal void loadGridCaracteristicas()
        {
            if (caracteristicas.Count > 0)
            {
                this.limpiarListCaracteristicas();
                
                gridCaracteristicas.DataSource = null;
                gridCaracteristicas.DataSource = caracteristicas;

                foreach (DataGridViewRow dr in gridCaracteristicas.Rows)
                {
                    if (dr.Cells["statusflag"].Value != null)
                    {
                        if (dr.Cells["statusflag"].Value.ToString() == "D")
                        {
                            //gridCaracteristicas.CurrentCell = null;
                            dr.Visible = false;
                        }
                    }
                }
                gridCaracteristicas.ClearSelection();
            }
        }

        internal void limpiarListCaracteristicas()
        {
            foreach (CARACTERISTICA carac in caracteristicas)
            {
                if (string.IsNullOrEmpty(carac.nombreCaracteristica) &&
                    string.IsNullOrWhiteSpace(carac.descripcion) &&
                    carac.statusflag == "D")
                {
                    carac.statusflag = "X";
                }
            }

            caracteristicas.RemoveAll(x => x.statusflag == "X");
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtCaracteristica.Text))
            {
                if (!string.IsNullOrWhiteSpace(txtDescrip.Text))
                {
                    CARACTERISTICA carac = new CARACTERISTICA()
                    {
                        idCaracteristica = string.Empty,
                        nombreCaracteristica = txtCaracteristica.Text,
                        descripcion = txtDescrip.Text,
                        statusflag = "I",
                        eliminado = 0
                    };

                    caracteristicas.Add(carac);

                    loadGridCaracteristicas();

                    txtCaracteristica.ResetText();
                    txtDescrip.ResetText();
                }
                else
                {
                    MessageBox.Show("Campo descripción se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Campo característica se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (txtCaracteristica.Tag != null)
            {
                if (gridCaracteristicas.SelectedRows.Count > 0)
                {
                    if (!string.IsNullOrWhiteSpace(txtCaracteristica.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtDescrip.Text))
                        {
                            int index = Convert.ToInt32(txtCaracteristica.Tag.ToString());
                            //modificamos en la lista y luego la cargamos en el gridview
                            caracteristicas[index].nombreCaracteristica = txtCaracteristica.Text;
                            caracteristicas[index].descripcion = txtDescrip.Text;
                            caracteristicas[index].statusflag = "U";

                            loadGridCaracteristicas();

                            txtCaracteristica.ResetText();
                            txtDescrip.ResetText();
                        }
                        else
                        {
                            MessageBox.Show("Campo descripción se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Campo característica se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione la especificación a modificar", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridCaracteristicas.SelectedRows.Count > 0)
            {
                int rowIndex = gridCaracteristicas.SelectedRows[0].Index;
                caracteristicas[rowIndex].statusflag = "D";
                loadGridCaracteristicas();

                txtCaracteristica.ResetText();
                txtDescrip.ResetText();
            }
        }

        #endregion
    }
}
